home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume3 / go / part05 < prev   
Encoding:
Internet Message Format  |  1988-03-09  |  18.1 KB

  1. Path: uunet!husc6!bloom-beacon!mit-eddie!uw-beaver!tektronix!tekgen!tekred!games-request
  2. From: games-request@tekred.TEK.COM
  3. Newsgroups: comp.sources.games
  4. Subject: v03i101:  go - go board manager sources, Part05/05
  5. Message-ID: <2272@tekred.TEK.COM>
  6. Date: 9 Mar 88 17:58:19 GMT
  7. Sender: billr@tekred.TEK.COM
  8. Lines: 703
  9. Approved: billr@tekred.TEK.COM
  10.  
  11. Submitted by: Fred Hansen <wjh+@andrew.cmu.edu>
  12. Comp.sources.games: Volume 3, Issue 101
  13. Archive-name: go/Part05
  14.  
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then unpack
  18. # it by saving it into a file and typing "sh file".  To overwrite existing
  19. # files, type "sh file -c".  You can also feed this as standard input via
  20. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  21. # will see the following message at the end:
  22. #        "End of archive 5 (of 5)."
  23. # Contents:  goMenu.pas
  24. # Wrapped by billr@saab on Wed Mar  9 09:14:47 1988
  25. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  26. if test -f goMenu.pas -a "${1}" != "-c" ; then 
  27.   echo shar: Will not over-write existing file \"goMenu.pas\"
  28. else
  29. echo shar: Extracting \"goMenu.pas\" \(16045 characters\)
  30. sed "s/^X//" >goMenu.pas <<'END_OF_goMenu.pas'
  31. X{---------------------------------------------------------------}
  32. X{ Go Menu Manager                                               }
  33. X{ Copyright (c) 1982 by Three Rivers Computer Corp.             }
  34. X{                                                               }
  35. X{ Written: December 3, 1982 by Stoney Ballard                   }
  36. X{ Edit History:                                                 }
  37. X{                                                               }
  38. X{   Jan  5, 1983 - Fixed bug in menu select                     }
  39. X{   Jan 27, 1983 - added setPlayLevel                           }
  40. X{---------------------------------------------------------------}
  41. X
  42. Xmodule goMenu;
  43. X
  44. Xexports
  45. X
  46. Ximports fileDefs from fileDefs;
  47. Ximports goTree from goTree;
  48. X
  49. Xprocedure initMenu;
  50. Xfunction getMenuCmd: integer;
  51. Xprocedure endCmd;
  52. Xprocedure putMString(cmd: integer; ms: string);
  53. Xprocedure activate(cmd: integer; act: boolean);
  54. Xprocedure restoreCursor;
  55. Xfunction confirmed: boolean;
  56. Xfunction menuGoFile(var fName: pathName): boolean;
  57. Xprocedure waitNoButton;
  58. Xprocedure waitButton;
  59. Xprocedure clearLine(ln: integer);
  60. Xprocedure prompt(s: string);
  61. Xprocedure showComment;
  62. Xprocedure showTag;
  63. Xfunction getHCMenu: integer;
  64. Xfunction getTagMenu: tagPtr;
  65. Xprocedure setMenuCursor;
  66. Xprocedure menuPlayLevel(var playLevel: integer; maxLevel: integer);
  67. X
  68. Xprivate
  69. X
  70. Ximports goCom from goCom;
  71. Ximports goMgr from goMgr;
  72. Ximports popUp from popUp;
  73. Ximports raster from raster;
  74. Ximports screen from screen;
  75. Ximports IO_Others from IO_Others;
  76. Ximports fileSystem from fileSystem;
  77. Ximports fileUtils from fileUtils;
  78. Ximports perq_String from perq_String;
  79. X
  80. Xconst
  81. X  mWidth = 180;
  82. X  mHeight = 18;
  83. X  mLBorder = 12;
  84. X  mTBorder = 10;
  85. X  mVSpacing = mHeight + 4;
  86. X  mHSpacing = mWidth + 8;
  87. X  grHeight = mHeight - 2;
  88. X  grWidth = (((mWidth - 2 + 15) div 16 + 3) div 4) * 4;
  89. X
  90. Xtype
  91. X  mStr = string[20];
  92. X
  93. X  menuBox = record
  94. X              leftX, topY, rightX, botY: integer;
  95. X              isAct: boolean;
  96. X              str: mStr;
  97. X            end;
  98. X
  99. X  greyPat = array[0..grHeight - 1] of array[0..grWidth - 1] of integer;
  100. X  pGreyPat = ^greyPat;
  101. X
  102. Xvar
  103. X  mItems: array[1..mLast] of menuBox;
  104. X  curHiLi, curCmd: integer;
  105. X  mGreyP: pGreyPat;
  106. X  isMenuCursor: boolean;
  107. X  valDesc: pNameDesc;
  108. X  cnfDesc: pNameDesc;
  109. X  res: resRes;
  110. X  goFNames: array[1..1024] of string[25];
  111. X  tabXPos, tabYPos: integer;
  112. X
  113. Xprocedure restoreCursor;
  114. Xbegin { restoreCursor }
  115. X  if isMenuCursor then
  116. X    IOLoadCursor(defaultCursor, 0, 0)
  117. X  else
  118. X    IOLoadCursor(selCursor, curC, curC);
  119. Xend { restoreCursor };
  120. X
  121. Xprocedure waitNoButton;
  122. Xbegin { waitNoButton }
  123. X  while tabYellow or tabWhite or tabGreen or tabBlue or tabSwitch do;
  124. Xend { waitNoButton };
  125. X
  126. Xprocedure waitButton;
  127. Xbegin { waitButton }
  128. X  while not tabSwitch do;
  129. Xend { waitButton };
  130. X
  131. Xprocedure menuPlayLevel(var playLevel: integer; maxLevel: integer);
  132. Xvar
  133. X  plMenu: pNameDesc;
  134. X  i: integer;
  135. X  res: resres;
  136. X
  137. X  handler outside;
  138. X  begin { outside }
  139. X    destroyNameDesc(plMenu);
  140. X    write(''); {control-G}
  141. X    waitNoButton;
  142. X    exit(menuPlayLevel);
  143. X  end { outside };
  144. X
  145. Xbegin { menuPlayLevel }
  146. X  allocNameDesc(maxLevel + 1, 0, plMenu);
  147. X  plMenu^.header := 'Play Level?';
  148. X  for i := 0 to maxLevel do
  149. X    begin
  150. X{$R-}
  151. X      plMenu^.commands[i + 1] := intToStr(i);
  152. X{$R=}
  153. X    end;
  154. X  menu(plMenu, false, 1, maxLevel + 1, -1, -1, -1, res);
  155. X  playLevel := res^.indices[1] - 1;
  156. X  destroyRes(res);
  157. X  destroyNameDesc(plMenu);
  158. Xend { menuPlayLevel };
  159. X
  160. Xfunction getTagMenu: tagPtr;
  161. Xvar
  162. X  tp: tagPtr;
  163. X  nTags, tIdx, i: integer;
  164. X  tMenu: pNameDesc;
  165. X  res: resres;
  166. X
  167. X  handler outside;
  168. X  begin { outside }
  169. X    destroyNameDesc(tMenu);
  170. X    write(''); {control-G}
  171. X    waitNoButton;
  172. X    exit(getTagMenu);
  173. X  end { outside };
  174. X
  175. Xbegin { getTagMenu }
  176. X  getTagMenu := nil;
  177. X  tp := treeRoot^.lastTag;
  178. X  nTags := 0;
  179. X  while tp <> nil do
  180. X    begin
  181. X      nTags := nTags + 1;
  182. X      tp := tp^.nextTag;
  183. X    end;
  184. X  if nTags = 0 then
  185. X    write('') {control-G}
  186. X  else
  187. X    begin
  188. X      tp := treeRoot^.lastTag;
  189. X      allocNameDesc(nTags, 0, tMenu);
  190. X      tMenu^.header := 'Which Tag?';
  191. X      for i := nTags downTo 1 do
  192. X        begin
  193. X{$R-}
  194. X          tMenu^.commands[i] := tp^.sTag;
  195. X{$R=}
  196. X          tp := tp^.nextTag;
  197. X        end;
  198. X      menu(tMenu, false, 1, nTags, -1, -1, -1, res);
  199. X      restoreCursor;
  200. X      tIdx := nTags - res^.indices[1];
  201. X      destroyRes(res);
  202. X      destroyNameDesc(tMenu);
  203. X      tp := treeRoot^.lastTag;
  204. X      for i := 1 to tIdx do
  205. X        tp := tp^.nextTag;
  206. X      getTagMenu := tp;
  207. X    end;
  208. Xend { getTagMenu };
  209. X
  210. Xprocedure clearLine(ln: integer);
  211. Xvar
  212. X  lY: integer;
  213. Xbegin { clearLine }
  214. X  lY := winTable[statWin].winTY +
  215. X        (ln * (charHeight + lineDel)) + lineY - charHeight;
  216. X  rasterop(RAndNot, sWinW - promptX - 32, charHeight,
  217. X                    promptX, lY, SScreenW, SScreenP,
  218. X                    promptX, lY, SScreenW, SScreenP);
  219. Xend { clearLine };
  220. X
  221. Xprocedure posLine(ln: integer);
  222. Xvar
  223. X  lY: integer;
  224. Xbegin { posLine }
  225. X  clearLine(ln);
  226. X  lY := winTable[statWin].winTY + (ln * (charHeight + lineDel)) + lineY;
  227. X  SSetCursor(promptX, lY);
  228. Xend { posLine };
  229. X
  230. Xprocedure prompt(s: string);
  231. Xbegin { prompt }
  232. X  posLine(promptLine);
  233. X  write(s);
  234. Xend { prompt };
  235. X
  236. Xprocedure showTag;
  237. Xvar
  238. X  ts: string;
  239. Xbegin { showTag }
  240. X  posLine(tagLine);
  241. X  if getTag(curMove, ts) then
  242. X    write('Tag: ', ts);
  243. Xend { showTag };
  244. X
  245. Xprocedure showComment;
  246. Xvar
  247. X  cs: string;
  248. Xbegin { showComment }
  249. X  posLine(cmtLine);
  250. X  if getComment(curMove, cs) then
  251. X    write('Comment: ', cs);
  252. Xend { showComment };
  253. X
  254. Xfunction getHCMenu: integer;
  255. Xvar
  256. X  res: resres;
  257. X
  258. X  handler outside;
  259. X  begin { outside }
  260. X    restoreCursor;
  261. X    getHCMenu := none;
  262. X    write(''); {control-G}
  263. X    exit(getHCMenu);
  264. X  end { outside };
  265. X
  266. Xbegin { getHCMenu }
  267. X  menu(valDesc, false, 1, 8, -1, -1, -1, res);
  268. X  restoreCursor;
  269. X  getHCMenu := res^.indices[1] + 1;
  270. X  destroyRes(res);
  271. Xend { getHCMenu };
  272. X
  273. Xfunction menuGoFile(var fName: pathName): boolean;
  274. Xvar
  275. X  fi, i: integer;
  276. X  fid: fileID;
  277. X  fileMenu: pNameDesc;
  278. X  res: resres;
  279. X  scanP: ptrScanRecord;
  280. X
  281. X  function isGoFName(var rName: string): boolean;
  282. X  var
  283. X    ts: string;
  284. X  begin { isGoFName }
  285. X    isGoFName := false;
  286. X    ts := rName;
  287. X    convUpper(ts);
  288. X    if length(ts) < 3 then
  289. X      exit(isGoFName);
  290. X    ts := subStr(ts, length(ts) - 2, 3);
  291. X    if ts = '.GO' then
  292. X      begin
  293. X        rName := subStr(rName, 1, length(rName) - 3);
  294. X        isGoFName := true;
  295. X      end;
  296. X  end { isGoFName };
  297. X
  298. X  handler outside;
  299. X  begin { outside }
  300. X    destroyNameDesc(fileMenu);
  301. X    restoreCursor;
  302. X    menuGoFile := false;
  303. X    write(''); {control-G}
  304. X    exit(menuGoFile);
  305. X  end { outside };
  306. X
  307. Xbegin { menuGoFile }
  308. X  new(scanP);
  309. X  scanP^.initialCall := true;
  310. X  scanP^.dirName := '';
  311. X  prompt('Scanning Directory...');
  312. X  fi := 0;
  313. X  while FSScan(scanP, fName, fid) do
  314. X    if isGoFName(fName) then
  315. X      begin
  316. X        fi := fi + 1;
  317. X        goFNames[fi] := fName;
  318. X      end;
  319. X  dispose(scanP);
  320. X  prompt('');
  321. X  if fi < 1 then
  322. X    begin
  323. X      prompt('No GO files found');
  324. X      menuGoFile := false;
  325. X      exit(menuGoFile);
  326. X    end;
  327. X  allocNameDesc(fi, 0, fileMenu);
  328. X  fileMenu^.header := 'Available Games';
  329. X  for i := 1 to fi do
  330. X    begin
  331. X{$R-}
  332. X      fileMenu^.commands[i] := goFNames[i];
  333. X{$R=}
  334. X    end;
  335. X  menu(fileMenu, false, 1, fi, -1, -1, -1, res);
  336. X  restoreCursor;
  337. X  destroyNameDesc(fileMenu);
  338. X  fName := goFNames[res^.indices[1]];
  339. X  destroyRes(res);
  340. X  menuGoFile := true;
  341. Xend { menuGoFile };
  342. X
  343. Xfunction confirmed: boolean;
  344. X
  345. X  handler outside;
  346. X  begin { outside }
  347. X    confirmed := false;
  348. X    restoreCursor;
  349. X    exit(confirmed);
  350. X  end { outside };
  351. X
  352. Xbegin { confirmed }
  353. X  if treeDirty then
  354. X    begin
  355. X      menu(cnfDesc, false, 1, 2, -1, -1, -1, res);
  356. X      restoreCursor;
  357. X      confirmed := res^.indices[1] = 2;
  358. X      destroyRes(res);
  359. X    end
  360. X  else
  361. X    confirmed := true;
  362. Xend { confirmed };
  363. X
  364. Xprocedure activate(cmd: integer; act: boolean);
  365. Xvar
  366. X  dFun: lineStyle;
  367. Xbegin { activate }
  368. X  with mItems[cmd] do
  369. X    begin
  370. X      isAct := act;
  371. X      if isAct then
  372. X        dFun := drawLine
  373. X      else
  374. X        dFun := eraseLine;
  375. X      line(dFun, leftX, topY, rightX, topY, SScreenP);
  376. X      line(dFun, leftX, botY, rightX, botY, SScreenP);
  377. X      line(dFun, leftX, topY, leftX, botY, SScreenP);
  378. X      line(dFun, rightX, topY, rightX, botY, SScreenP);
  379. X    end;
  380. Xend { activate };
  381. X
  382. Xfunction findItem(x, y: integer): integer;
  383. Xvar
  384. X  i: integer;
  385. Xbegin { findItem }
  386. X  for i := 1 to mLast do
  387. X    with mItems[i] do
  388. X      if isAct then
  389. X        if (x >= leftX) and (x <= rightX) and
  390. X           (y >= topY) and (y <= botY) then
  391. X          begin
  392. X            findItem := i;
  393. X            exit(findItem);
  394. X          end;
  395. X  findItem := none;
  396. Xend { findItem };
  397. X
  398. Xprocedure invertItem(cmd: integer);
  399. Xbegin { invertItem }
  400. X  with mItems[cmd] do
  401. X    rasterop(rNot, mWidth - 2, mHeight - 2,
  402. X                   leftX + 1, topY + 1, SScreenW, SScreenP,
  403. X                   leftX + 1, topY + 1, SScreenW, SScreenP);
  404. Xend { invertItem };
  405. X
  406. Xprocedure checkHighLight;
  407. Xvar
  408. X  cmd: integer;
  409. Xbegin { checkHighLight }
  410. X  cmd := findItem(tabXPos, tabYPos);
  411. X  if cmd <> curHiLi then
  412. X    begin
  413. X      if curHiLi <> none then
  414. X        invertItem(curHiLi);
  415. X      if cmd <> none then
  416. X        invertItem(cmd);
  417. X      curHiLi := cmd;
  418. X    end;
  419. Xend { checkHighLight };
  420. X
  421. Xprocedure writeMStr(cmd, cFunc: integer);
  422. Xbegin { writeMStr }
  423. X  SChrFunc(cFunc);
  424. X  with mItems[cmd] do
  425. X    begin
  426. X      SSetCursor(leftX + 9, botY - 2);
  427. X      write(str);
  428. X    end;
  429. X  SChrFunc(rRpl);
  430. Xend { writeMStr };
  431. X
  432. Xprocedure xorGrey(cmd: integer);
  433. Xbegin { xorGrey }
  434. X  if (cmd <> none) and (cmd <= mLast) then
  435. X    with mItems[cmd] do
  436. X      rasterop(rXor, mWidth - 2, mHeight - 2,
  437. X                     leftX + 1, topY + 1, SScreenW, SScreenP,
  438. X                     0, 0, grWidth, mGreyP);
  439. Xend { xorGrey };
  440. X
  441. Xprocedure selItem(cmd: integer);
  442. Xbegin { selItem }
  443. X  xorGrey(cmd);
  444. X  writeMStr(cmd, rOr);
  445. Xend { selItem };
  446. X
  447. Xprocedure deSelItem(cmd: integer);
  448. Xbegin { deSelItem }
  449. X  xorGrey(cmd);
  450. X  writeMStr(cmd, rAndNot);
  451. Xend { deSelItem };
  452. X
  453. Xprocedure setMenuCursor;
  454. Xbegin { setMenuCursor }
  455. X  if not isMenuCursor then
  456. X    begin
  457. X      IOLoadCursor(defaultCursor, 0, 0);
  458. X      isMenuCursor := true;
  459. X    end;
  460. Xend { setMenuCursor };
  461. X
  462. Xfunction getMenuCmd: integer;
  463. Xvar
  464. X  cmd, nCmd: integer;
  465. X  gOn: boolean;
  466. Xbegin { getMenuCmd }
  467. X  tabXPos := tabRelX;
  468. X  tabYPos := tabRelY;
  469. X  with winTable[boardWin] do
  470. X    if (tabXPos >= winLX) and (tabXPos <= winRX) and
  471. X       (tabYPos >= winTY) and (tabYPos <= winBY) then
  472. X      begin
  473. X        if isMenuCursor then
  474. X          IOLoadCursor(selCursor, curC, curC);
  475. X        isMenuCursor := false;
  476. X      end
  477. X    else
  478. X      setMenuCursor;
  479. X  checkHighLight;
  480. X  if not tabSwitch then
  481. X    curCmd := none
  482. X  else if tabWhite then
  483. X    begin
  484. X      with mItems[mBackOne] do
  485. X        if isAct then
  486. X          begin
  487. X            cmd := mBackOne;
  488. X            if curHiLi <> cmd then
  489. X              begin
  490. X                if curHiLi <> none then
  491. X                  invertItem(curHiLi);
  492. X                invertItem(cmd);
  493. X              end;
  494. X            curHiLi := cmd;
  495. X            curCmd := cmd;
  496. X            selItem(cmd);
  497. X          end
  498. X        else
  499. X          write(''); {control-G}
  500. X      waitNoButton;
  501. X    end
  502. X  else if tabGreen then
  503. X    begin
  504. X      with mItems[mForOne] do
  505. X        if isAct then
  506. X          begin
  507. X            cmd := mForOne;
  508. X            if curHiLi <> cmd then
  509. X              begin
  510. X                if curHiLi <> none then
  511. X                  invertItem(curHiLi);
  512. X                invertItem(cmd);
  513. X              end;
  514. X            curHiLi := cmd;
  515. X            curCmd := cmd;
  516. X            selItem(cmd);
  517. X          end
  518. X        else
  519. X          write(''); {control-G}
  520. X      waitNoButton;
  521. X    end
  522. X  else { tabYellow or tabBlue }
  523. X    begin
  524. X      cmd := findItem(tabXPos, tabYPos);
  525. X      if cmd <> none then
  526. X        begin
  527. X          selItem(cmd);
  528. X          gOn := true;
  529. X          while tabSwitch do
  530. X            begin
  531. X              nCmd := findItem(tabRelX, tabRelY);
  532. X              if nCmd <> cmd then
  533. X                begin
  534. X                  if gOn then
  535. X                    deSelItem(cmd);
  536. X                  gOn := false;
  537. X                end
  538. X              else
  539. X                begin
  540. X                  if not gOn then
  541. X                    selItem(cmd);
  542. X                  gOn := true;
  543. X                end;  
  544. X            end;
  545. X          if gOn then
  546. X            begin
  547. X              curCmd := cmd;
  548. X            end
  549. X          else
  550. X            begin
  551. X              write(''); {control-G}
  552. X              curCmd := none;
  553. X            end;
  554. X          waitNoButton;
  555. X        end
  556. X      else
  557. X        with winTable[boardWin] do
  558. X          if (tabXPos >= winLX) and (tabXPos <= winRX) and
  559. X             (tabYPos >= winTY) and (tabYPos <= winBY) then
  560. X            curCmd := mPlaceStone
  561. X          else
  562. X            begin
  563. X              write(''); {control-G}
  564. X              curCmd := none;
  565. X              waitNoButton;
  566. X            end;
  567. X    end;
  568. X  getMenuCmd := curCmd;
  569. Xend { getMenuCmd };
  570. X
  571. Xprocedure endCmd;
  572. Xbegin { endCmd }
  573. X  if (curCmd <> none) and (curCmd <= mLast) then
  574. X    deSelItem(curCmd);
  575. X  curCmd := none;
  576. Xend { endCmd };
  577. X
  578. Xprocedure putMString(cmd: integer; ms: string);
  579. Xbegin { putMString }
  580. X  if (curCmd = cmd) and (cmd <= mLast) then
  581. X    begin
  582. X      deSelItem(cmd);
  583. X      curCmd := none;
  584. X    end;
  585. X  with mItems[cmd] do
  586. X    begin
  587. X      rasterOp(rAndNot, mWidth - 2, mHeight - 2,
  588. X               leftX + 1, topY + 1, SScreenW, SScreenP,
  589. X               leftX + 1, topY + 1, SScreenW, SScreenP);
  590. X      str := ms;
  591. X      writeMStr(cmd, rRpl);
  592. X      if curHiLi = cmd then
  593. X        invertItem(cmd);
  594. X    end;
  595. Xend { putMString };
  596. X
  597. Xprocedure initMenu;
  598. Xvar
  599. X  i, j: integer;
  600. X
  601. X  procedure setItem(cmd, sx, sy: integer; cs: string);
  602. X  begin { setItem }
  603. X    with mItems[cmd] do
  604. X      begin
  605. X        leftX := (sx * mHSpacing) + mLBorder + mWinX;
  606. X        topY := (sy * mVSpacing) + mTBorder + mWinY;
  607. X        isAct := false;
  608. X        rightX := leftX + mWidth - 1;
  609. X        botY := topY + mHeight - 1;
  610. X        putMString(cmd, cs);
  611. X      end;
  612. X  end { setItem };
  613. X
  614. Xbegin { initMenu }
  615. X  curHiLi := none;
  616. X  curCmd := none;
  617. X  setItem(mPass, 0, 0, 'Pass');
  618. X  setItem(mAutoPlay, 0, 1, 'Generate Move');
  619. X  setItem(mPlayMyself, 0, 2, 'Play Myself');
  620. X  setItem(mSetPlayLevel, 0, 3, 'Set Play Level');
  621. X  setItem(mSetHC, 0, 4, 'Set Handicap');
  622. X  setItem(mScore, 0, 5, 'Score');
  623. X  setItem(mQuit, 0, 6, 'Quit');
  624. X  setItem(mInit, 0, 7, 'Initialize');
  625. X  setItem(mBackOne, 1, 0, 'Backup One');
  626. X  setItem(mGotoRoot, 1, 1, 'Back to Start');
  627. X  setItem(mBackToBr, 1, 2, 'Back to Branch');
  628. X  setItem(mBackToStone, 1, 3, 'Back to Stone');
  629. X  setItem(mEraseMove, 1, 4, 'Erase Move');
  630. X  setItem(mPruneBranches, 1, 5, 'Prune Branches');
  631. X  setItem(mDebug, 1, 6, 'Turn Debug On');
  632. X  setItem(mWriteFile, 1, 7, 'Write File');
  633. X  setItem(mForOne, 2, 0, 'Forward One');
  634. X  setItem(mForToLeaf, 2, 1, 'Forward to Leaf');
  635. X  setItem(mForToBr, 2, 2, 'Forward to Branch');
  636. X  setItem(mStepToTag, 2, 3, 'Step Towards Tag');
  637. X  setItem(mGotoTag, 2, 5, 'Go To Tag');
  638. X  setItem(mRefBoard, 2, 6, 'Refresh Board');
  639. X  setItem(mReadFile, 2, 7, 'Read File');
  640. X  setItem(mPutTag, 3, 0, 'Put Tag');
  641. X  setItem(mPutCmt, 3, 1, 'Put Comment');
  642. X  setItem(mSetStepTag, 3, 2, 'Set Step Tag');
  643. X  setItem(mShoState, 3, 3, 'Show Player State');
  644. X  setItem(mTogNums, 3, 4, 'Show Stone Numbers');
  645. X  setItem(mBoardSize, 3, 5, 'Use Small Board');
  646. X  setItem(mPrintBoard, 3, 6, 'Print Board');
  647. X  setItem(mPrintDiag, 3, 7, 'Print Diagram');
  648. X  initPopUp;
  649. X  allocNameDesc(8, 0, valDesc);
  650. X  with valDesc^ do
  651. X    begin
  652. X{$R-}
  653. X      header := 'How Many?';
  654. X      commands[1] := '2';
  655. X      commands[2] := '3';
  656. X      commands[3] := '4';
  657. X      commands[4] := '5';
  658. X      commands[5] := '6';
  659. X      commands[6] := '7';
  660. X      commands[7] := '8';
  661. X      commands[8] := '9';
  662. X{$R=}
  663. X    end;
  664. X  allocNameDesc(2, 0, cnfDesc);
  665. X  with cnfDesc^ do
  666. X    begin
  667. X      header := 'Confirm';
  668. X{$R-}
  669. X      commands[1] := 'No';
  670. X      commands[2] := 'Yes';
  671. X{$R=}
  672. X    end;
  673. X  new(0, 4, mGreyP);
  674. X  i := 0;
  675. X  repeat
  676. X    for j := 0 to (grWidth - 1) do
  677. X      case (i mod 4) of
  678. X        0, 2:
  679. X          mGreyP^[i, j] := #177777;
  680. X        1:
  681. X          mGreyP^[i, j] := #125252;
  682. X        3:
  683. X          mGreyP^[i, j] := #052525;
  684. X      end;
  685. X    i := i + 1;
  686. X  until i > (grHeight - 1);
  687. X  isMenuCursor := true;
  688. Xend. { initMenu }
  689. X
  690. END_OF_goMenu.pas
  691. echo shar: 9 control characters may be missing from \"goMenu.pas\"
  692. if test 16045 -ne `wc -c <goMenu.pas`; then
  693.     echo shar: \"goMenu.pas\" unpacked with wrong size!
  694. fi
  695. # end of overwriting check
  696. fi
  697. echo shar: End of archive 5 \(of 5\).
  698. cp /dev/null ark5isdone
  699. MISSING=""
  700. for I in 1 2 3 4 5 ; do
  701.     if test ! -f ark${I}isdone ; then
  702.     MISSING="${MISSING} ${I}"
  703.     fi
  704. done
  705. if test "${MISSING}" = "" ; then
  706.     echo You have unpacked all 5 archives.
  707.     rm -f ark[1-9]isdone
  708. else
  709.     echo You still need to unpack the following archives:
  710.     echo "        " ${MISSING}
  711. fi
  712. ##  End of shell archive.
  713. exit 0
  714.